import warnings
warnings.warn("qturboframe.public_ui.ucf_h_ui.input_number模块已被废弃，替代模块为qturboframe.public_ui.h_ui.input_number", DeprecationWarning)

from ..ucf_base_element import BaseElement
from qturboframe.lib.utils.check import CheckBasic
from qturboframe.lib.report.log import logger
from qturboframe.lib.ranorex.exceptions import CsClientError
from qturboframe.lib.ranorex.web_element.div_tag import DivTag
from qturboframe.lib.ranorex.web_element.input_tag import InputTag


class InputNumber(BaseElement, CheckBasic):
    '''hui文本框操作类'''

    def __init__(self, element_para, father=None, timeout=10000):
        super().__init__(element_para, father, timeout)
        class_list = self._element.get_attribute('class').split(' ')
        if 'h-input-number' not in class_list:
            self._element = self._element.find_element_by_attribute(
                'xpath', './ancestor::div[@class~\'h-input-number\']', timeout=self.timeout)
        self._element = DivTag(self._element.control)
        self.input_type = InputTag(self._element.find_element_by_attribute(
            'xpath','.//*[@class~\'h-input-number-input\']', timeout=self.timeout).control)

    def set_value(self, value):
        '''
        hui文本框填充

        :Args:
         - text: 填充值

        :Example:
         - 例: input_type.set_value('admin')
        '''
        self.input_type.focus()
        self.input_type.send_keys(value)
        # from qturboframe.lib.utils.windows.win_desktop import key_input
        # key_input(value)

    def is_default(self, value):
        """
        检查hui文本框件默认值

        :Args:
         - value: 待检查的值

        :Returns:
            检查匹配返回True，否则返回False

        :Example:
         - 例: input_type.is_default('admin')
        """
        self.input_type.focus()
        if self.input_type.text:
            text = self.input_type.text
        elif self.input_type.get_attribute('value'):
            text = self.input_type.get_attribute('value')
        elif self.input_type.get_attribute('placeholder'):
            text = self.input_type.get_attribute('placeholder')
        elif self.input_type.get_attribute('title'):
            text = self.input_type.get_attribute('title')
        else:
            text = ''
        if text == value:
            return True
        else:
            logger.error('文本框默认值不匹配！')
            return False

    def is_readonly(self):
        '''
        检查hui文本框是否只读

        :Return:
            只读返回True，否则返回False

        :Example:
         - 例: input_type.is_readonly()
        '''
        self.input_type.focus()
        return self.input_type.is_readonly()

    def is_nonnull(self):
        '''
        检查hui文本框是否有非空属性

        :Returns:
            非空返回True，否则返回False

        :Example:
         - 例: input_type.is_nonnull()
        '''
        self.input_type.focus()
        form_item = DivTag(self._element.find_element_by_attribute(
            'xpath', './ancestor::div[@class~\'h-form-item-content\']/'
                     'parent::div[@class~\'h-form-item\']', timeout=self.timeout).control)
        item_class_list = form_item.get_attribute('class').split()
        if 'h-form-item-required' in item_class_list:
            return True
        else:
            return False

    def clear(self):
        '''
        hui文本框清空

        :Usage:
         - input_type.clear()
        '''
        self.input_type.focus()
        self.input_type.clear()
        # from qturboframe.lib.utils.windows.win_desktop import key_press, key_up
        # key_press(['ctrl', 'a'])
        # key_up(['ctrl', 'a'])
        # key_press('backspace')
        # key_up('backspace')

    def check_default(self, value):
        '''
        校验hui文本框默认值

        :Args:
         - value: 待检查的值

        :Raises:
            SeleniumError: 文本框默认值校验不通过

        :Example:
         - 例: input_type.check_default('admin')
        '''
        if not self.is_default(value):
            raise CsClientError('文本框默认值校验不通过！')

    def check_readonly(self):
        '''
        校验hui文本框只读属性

        :Raises:
            SeleniumError: 文本框只读校验不通过

        :Example:
         - 例: input_type.check_readonly()
        '''
        if not self.is_readonly():
            raise CsClientError('文本框只读校验不通过！')

    def check_nonnull(self):
        '''
        校验hui文本框非空属性

        :Raises:
            SeleniumError: 文本框非空校验不通过

        :Example:
         - 例: input_type.check_nonnull()
        '''
        if not self.is_nonnull():
            raise CsClientError('文本框非空校验不通过！')
